home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / pbmplus / pbm / libpbm3.c < prev    next >
Text File  |  1996-02-28  |  3KB  |  116 lines

  1. /* libpbm3.c - pbm utility library part 3
  2. **
  3. ** Copyright (C) 1988 by Jef Poskanzer.
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include "pbm.h"
  14. #include "libpbm.h"
  15.  
  16. void
  17. pbm_writepbminit( file, cols, rows, forceplain )
  18.     FILE* file;
  19.     int cols, rows;
  20.     int forceplain;
  21.     {
  22. #ifdef PBMPLUS_RAWBITS
  23.     if ( ! forceplain )
  24.     fprintf( file, "%c%c\n%d %d\n", PBM_MAGIC1, RPBM_MAGIC2, cols, rows );
  25.     else
  26.     fprintf( file, "%c%c\n%d %d\n", PBM_MAGIC1, PBM_MAGIC2, cols, rows );
  27. #else /*PBMPLUS_RAWBITS*/
  28.     fprintf( file, "%c%c\n%d %d\n", PBM_MAGIC1, PBM_MAGIC2, cols, rows );
  29. #endif /*PBMPLUS_RAWBITS*/
  30.     }
  31.  
  32. #ifdef PBMPLUS_RAWBITS
  33. static void
  34. pbm_writepbmrowraw( file, bitrow, cols )
  35.     FILE* file;
  36.     bit* bitrow;
  37.     int cols;
  38.     {
  39.     register int col, bitshift;
  40.     register unsigned char item;
  41.     register bit* bP;
  42.  
  43.     bitshift = 7;
  44.     item = 0;
  45.     for ( col = 0, bP = bitrow; col < cols; ++col, ++bP )
  46.     {
  47.     if ( *bP )
  48.         item += 1 << bitshift;
  49.     --bitshift;
  50.     if ( bitshift == -1 )
  51.         {
  52.         (void) putc( item, file );
  53.         bitshift = 7;
  54.         item = 0;
  55.         }
  56.     }
  57.     if ( bitshift != 7 )
  58.     (void) putc( item, file );
  59.     }
  60. #endif /*PBMPLUS_RAWBITS*/
  61.  
  62. static void
  63. pbm_writepbmrowplain( file, bitrow, cols )
  64.     FILE* file;
  65.     bit* bitrow;
  66.     int cols;
  67.     {
  68.     register int col, charcount;
  69.     register bit* bP;
  70.  
  71.     charcount = 0;
  72.     for ( col = 0, bP = bitrow; col < cols; ++col, ++bP )
  73.     {
  74.     if ( charcount >= 70 )
  75.         {
  76.         (void) putc( '\n', file );
  77.         charcount = 0;
  78.         }
  79.     (void) putc( *bP ? '1' : '0', file );
  80.     ++charcount;
  81.     }
  82.     (void) putc( '\n', file );
  83.     }
  84.  
  85. void
  86. pbm_writepbmrow( file, bitrow, cols, forceplain )
  87.     FILE* file;
  88.     bit* bitrow;
  89.     int cols;
  90.     int forceplain;
  91.     {
  92. #ifdef PBMPLUS_RAWBITS
  93.     if ( ! forceplain )
  94.     pbm_writepbmrowraw( file, bitrow, cols );
  95.     else
  96.     pbm_writepbmrowplain( file, bitrow, cols );
  97. #else /*PBMPLUS_RAWBITS*/
  98.     pbm_writepbmrowplain( file, bitrow, cols );
  99. #endif /*PBMPLUS_RAWBITS*/
  100.     }
  101.  
  102. void
  103. pbm_writepbm( file, bits, cols, rows, forceplain )
  104.     FILE* file;
  105.     bit** bits;
  106.     int cols, rows;
  107.     int forceplain;
  108.     {
  109.     int row;
  110.  
  111.     pbm_writepbminit( file, cols, rows, forceplain );
  112.  
  113.     for ( row = 0; row < rows; ++row )
  114.     pbm_writepbmrow( file, bits[row], cols, forceplain );
  115.     }
  116.